package src.main.java.action;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import src.main.java.entity.CarrinhoTO;
import src.main.java.entity.EstoqueTO;
import src.main.java.entity.ProdutoTO;
import src.main.java.modules.container.DescricaoDeProdutosCaller;
import src.main.java.modules.container.EstoqueCaller;

import com.opensymphony.xwork2.ActionSupport;

public class ProdutoAction extends ActionSupport implements ServletRequestAware, ServletResponseAware, SessionAware {
	
	private HttpServletRequest request;
	private HttpServletResponse response;
	private Map<String, Object> session;
	
	private String nomeProduto;
	private String categoriaProduto;
	private String fabricanteProduto;
	private List<ProdutoTO> produtos;
	private CarrinhoTO carrinho;
	
	private String param;
	
	@Action(value = "/", results = {
			@Result(location = "index.jsp", name = "ok") }
	)
	public String home(){
		carrinho = (CarrinhoTO)session.get("carrinho");
		produtos = DescricaoDeProdutosCaller.buscaProdutosByFilter(null, null, null);
		for(ProdutoTO produto : produtos){
			EstoqueTO estoque = EstoqueCaller.buscaEstoqueProduto(produto.getCodigo());
			if(estoque != null && estoque.getProduct() != null){
				produto.setQuantidade(estoque.getProduct().getQuantity());
				produto.setValor(estoque.getProduct().getPrice());
			}else{
				produto.setQuantidade(-1);
			}
		}
		session.put("produtos", produtos);
		return "ok";
	}
	
	@Action(value = "/filtroProdutos", results = {
			@Result(location = "index.jsp", name = "ok") }
	)
	public String filtroProdutos(){
		System.out.println("NomeProduto:" + nomeProduto + ". categoria:"+categoriaProduto + ". fabricante:"+fabricanteProduto);
		produtos = DescricaoDeProdutosCaller.buscaProdutosByFilter(nomeProduto.equals("") ? null : nomeProduto, categoriaProduto.equals("") ? null :categoriaProduto, fabricanteProduto.equals("") ? null : fabricanteProduto);
		for(ProdutoTO produto : produtos){
			EstoqueTO estoque = EstoqueCaller.buscaEstoqueProduto(produto.getCodigo());
			if(estoque != null && estoque.getProduct() != null){
				produto.setQuantidade(estoque.getProduct().getQuantity());
				produto.setValor(estoque.getProduct().getPrice());
			}else{
				produto.setQuantidade(-1);
			}
		}
		return "ok";
	}
	
	public List<String> getCategories(){
		return DescricaoDeProdutosCaller.getCategoriesNames();
	}
	
	public List<String> getVendors(){
		return DescricaoDeProdutosCaller.getVendorsNames();
	}

	public String getNomeProduto() {
		return nomeProduto;
	}

	public void setNomeProduto(String nomeProduto) {
		this.nomeProduto = nomeProduto;
	}

	public String getCategoriaProduto() {
		return categoriaProduto;
	}

	public void setCategoriaProduto(String categoriaProduto) {
		this.categoriaProduto = categoriaProduto;
	}

	public String getFabricanteProduto() {
		return fabricanteProduto;
	}

	public void setFabricanteProduto(String fabricanteProduto) {
		this.fabricanteProduto = fabricanteProduto;
	}

	public List<ProdutoTO> getProdutos() {
		return produtos;
	}

	public void setProdutos(List<ProdutoTO> produtos) {
		this.produtos = produtos;
	}

	public String getParam() {
		return param;
	}

	public void setParam(String param) {
		this.param = param;
	}
	
	@Override
	public void setServletResponse(HttpServletResponse arg0) {
		this.response = arg0;
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.request = arg0;
	}

	@Override
	public void setSession(Map<String, Object> arg0) {
		this.session = arg0;		
	}
	public CarrinhoTO getCarrinho() {
		return carrinho;
	}

	public void setCarrinho(CarrinhoTO carrinho) {
		this.carrinho = carrinho;
	}
}
